SQL JOIN : Entenda como funciona
Autor: Paulo Rafael de Souza Silva

O SQL JOIN é um dos recursos mais importantes do SQL, porque permite combinar dados de duas ou mais tabelas em uma única consulta. Ele é amplamente usado quando as informações estão divididas em tabelas relacionadas, como clientes e pedidos, produtos e categorias, alunos e matrículas.

Neste artigo, você vai entender o que é JOIN, como ele funciona, quais são os principais tipos e ver exemplos práticos para usar no dia a dia.

O que é SQL JOIN?

JOIN é uma cláusula usada para relacionar tabelas por meio de uma coluna em comum, geralmente uma chave primária em uma tabela e uma chave estrangeira em outra. Em vez de consultar cada tabela separadamente, você consegue unir os dados e montar resultados mais completos.

Em bancos relacionais, isso é essencial porque as informações costumam ser normalizadas, ou seja, separadas em várias tabelas para evitar duplicidade e facilitar a organização.

Como o JOIN funciona

O JOIN compara valores de uma coluna entre tabelas e retorna os registros que atendem à condição definida na cláusula ON. Dependendo do tipo de JOIN, ele pode trazer apenas os registros correspondentes ou também registros sem correspondência em uma das tabelas.

A estrutura básica costuma seguir este padrão:

SELECT colunas
FROM tabela1
JOIN tabela2
ON tabela1.campo = tabela2.campo;

O segredo está em entender qual tipo de junção usar para cada situação.

Exemplo de tabelas

Para facilitar, vamos imaginar duas tabelas: clientes e pedidos.

Tabela clientes

id_cliente | nome
1          | Ana
2          | Bruno
3          | Carla
4          | Diego

Tabela pedidos

id_pedido | id_cliente | produto
101       | 1          | Teclado
102       | 1          | Mouse
103       | 3          | Monitor
104       | 5          | Cadeira

Nesse cenário, nem todos os clientes fizeram pedidos, e existe um pedido de um cliente que não aparece na tabela de clientes. Isso nos ajuda a entender melhor o comportamento de cada tipo de JOIN.

INNER JOIN

O INNER JOIN retorna apenas os registros que têm correspondência nas duas tabelas. Se não houver match entre os campos relacionados, o registro não aparece no resultado.

SELECT c.nome, p.produto
FROM clientes c
INNER JOIN pedidos p
ON c.id_cliente = p.id_cliente;

Resultado esperado: apenas Ana e Carla apareceriam, porque são os clientes que têm pedidos vinculados.

nome  | produto
Ana   | Teclado
Ana   | Mouse
Carla | Monitor

Esse é o tipo de JOIN mais usado quando você quer apenas dados relacionados.

LEFT JOIN

O LEFT JOIN retorna todos os registros da tabela da esquerda e, quando houver correspondência, traz os dados da tabela da direita. Se não houver correspondência, os campos da tabela da direita vêm como NULL.

SELECT c.nome, p.produto
FROM clientes c
LEFT JOIN pedidos p
ON c.id_cliente = p.id_cliente;

Resultado esperado: todos os clientes aparecerão, mesmo aqueles sem pedidos, como Bruno e Diego.

nome  | produto
Ana   | Teclado
Ana   | Mouse
Bruno | NULL
Carla | Monitor
Diego | NULL

Esse tipo é muito útil para identificar cadastros sem movimentação, como clientes sem compras ou alunos sem matrícula.

RIGHT JOIN

O RIGHT JOIN funciona de forma parecida com o LEFT JOIN, mas retorna todos os registros da tabela da direita. Quando não existe correspondência, os campos da tabela da esquerda ficam como NULL.

SELECT c.nome, p.produto
FROM clientes c
RIGHT JOIN pedidos p
ON c.id_cliente = p.id_cliente;

Resultado esperado: todos os pedidos aparecerão, inclusive o pedido com id_cliente = 5, mesmo que esse cliente não exista na tabela de clientes.

nome  | produto
Ana   | Teclado
Ana   | Mouse
Carla | Monitor
NULL  | Cadeira

Na prática, o RIGHT JOIN é menos usado do que o LEFT JOIN, porque muitas vezes é possível inverter a ordem das tabelas e usar LEFT JOIN no lugar.

FULL OUTER JOIN

O FULL OUTER JOIN retorna todos os registros das duas tabelas. Quando não houver correspondência, os campos da tabela sem match aparecem como NULL.

SELECT c.nome, p.produto
FROM clientes c
FULL OUTER JOIN pedidos p
ON c.id_cliente = p.id_cliente;

Resultado esperado: você verá todos os clientes e todos os pedidos, mesmo os que não têm relação entre si.

nome  | produto
Ana   | Teclado
Ana   | Mouse
Bruno | NULL
Carla | Monitor
Diego | NULL
NULL  | Cadeira

Esse tipo é ideal quando você quer uma visão completa dos dois lados da relação.

CROSS JOIN

O CROSS JOIN gera todas as combinações possíveis entre os registros das tabelas. Ele não usa condição de correspondência com ON.

SELECT c.nome, p.produto
FROM clientes c
CROSS JOIN pedidos p;

Se houver 4 clientes e 4 pedidos, o resultado terá 16 combinações. Isso pode ser útil em situações específicas, como geração de combinações ou testes, mas deve ser usado com cuidado porque pode produzir muitos registros.

SELF JOIN

O SELF JOIN é quando uma tabela se relaciona com ela mesma. Ele é útil em estruturas hierárquicas, como funcionários e seus gerentes, categorias e subcategorias, ou cidades e estados relacionados em uma mesma tabela.

SELECT a.nome AS funcionario, b.nome AS gerente
FROM funcionarios a
LEFT JOIN funcionarios b
ON a.id_gerente = b.id_funcionario;

Esse tipo de JOIN é muito usado quando os dados da própria tabela precisam ser comparados entre si.

Diferença entre os tipos

Tipo O que retorna
INNER JOIN Somente registros com correspondência nas duas tabelas.
LEFT JOIN Todos os registros da tabela da esquerda e correspondências da direita.
RIGHT JOIN Todos os registros da tabela da direita e correspondências da esquerda.
FULL OUTER JOIN Todos os registros das duas tabelas, com NULL onde não houver correspondência.
CROSS JOIN Todas as combinações possíveis entre os registros.
SELF JOIN Relaciona a própria tabela com ela mesma.

Boas práticas ao usar JOIN

Use aliases para deixar a consulta mais legível e fácil de manter. Isso evita repetir nomes longos de tabelas e melhora a organização do código.

Tenha atenção à cláusula ON, porque uma condição errada pode gerar resultados incompletos ou duplicados. Também é importante entender quais colunas realmente fazem parte do relacionamento entre as tabelas.

Evite usar JOIN sem necessidade, principalmente em tabelas grandes, pois isso pode impactar o desempenho da consulta. Sempre revise o resultado para garantir que a lógica está correta.

Exemplo prático completo

A seguir, um exemplo mais realista para listar clientes e seus pedidos:

SELECT 
  c.id_cliente,
  c.nome,
  p.id_pedido,
  p.produto
FROM clientes c
LEFT JOIN pedidos p
ON c.id_cliente = p.id_cliente
ORDER BY c.nome;

Esse tipo de consulta é bastante comum em sistemas de vendas, relatórios gerenciais e dashboards. Ela permite visualizar os clientes com ou sem pedidos, o que ajuda em análises mais completas.

Quando usar cada um

  • Use INNER JOIN quando quiser apenas registros relacionados.
  • Use LEFT JOIN quando quiser manter todos os registros da tabela principal.
  • Use RIGHT JOIN quando a tabela da direita for a principal.
  • Use FULL OUTER JOIN quando quiser tudo de ambas as tabelas.
  • Use CROSS JOIN quando precisar de todas as combinações possíveis.
  • Use SELF JOIN quando a tabela precisar ser comparada com ela mesma.

Conclusão

O SQL JOIN é uma ferramenta fundamental para quem trabalha com bancos de dados, porque permite cruzar informações e criar consultas muito mais ricas. Entender a diferença entre INNER, LEFT, RIGHT, FULL, CROSS e SELF JOIN faz toda a diferença na hora de montar relatórios e análises.

Com prática, você vai perceber que escolher o JOIN correto é menos sobre decorar sintaxe e mais sobre entender a relação entre as tabelas. Quando isso fica claro, suas consultas se tornam mais precisas, úteis e profissionais.

Comentários:

Deixe seu Comentario:
Confira outros conteúdos:
Comandos SQL Essenciais: Um Guia Prático para Programadores Junior

Comandos SQL Essenciais: Um Guia Prático para Programadores Junior